package website.servlet;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;

import website.modelo.JuegoBean;
import website.modelo.ServicioBean;
import website.negocio.GestionarJuego;
import website.negocio.GestionarServicio;

/**
 * Servlet implementation class GrabarJuegoServlet
 */
@WebServlet("/GrabarJuegoServlet")
public class GrabarJuegoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public GrabarJuegoServlet() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		JuegoBean juego = new JuegoBean();
		juego.setEstado(1);

		GestionarJuego gestionarJuego = new GestionarJuego();

		String mensaje = null;
		String status = null;
		String fileName = null;
		int row = 0;
		List<JuegoBean> juegos = null;
		
		GestionarServicio gestionarServicio = new GestionarServicio();
		List<ServicioBean> servicios = gestionarServicio.obtenerServicios();

		try {
			List<FileItem> items = new ServletFileUpload(
					new DiskFileItemFactory()).parseRequest(request);
			for (FileItem item : items) {
				if (item.isFormField()) {
					String fieldName = item.getFieldName();
					String fieldValue = item.getString();

					if (fieldName.equalsIgnoreCase("nombre")) {
						juego.setNombre(fieldValue);
					} else if (fieldName.equalsIgnoreCase("descripcion")) {
						juego.setDescripcion(fieldValue);
					} else if (fieldName.equalsIgnoreCase("materiales")) {
						juego.setMateriales(fieldValue);
					} else if (fieldName.equalsIgnoreCase("costo")) {
						juego.setCostoPersona(Double.parseDouble(fieldValue));
					} else if (fieldName.equalsIgnoreCase("imagenDefault")) {
						juego.setImagen(fieldValue);
					} else if (fieldName.equalsIgnoreCase("juegoId")) {
						if (fieldValue != null) {
							int id = Integer.parseInt(fieldValue);
							juego.setId(id);
						}
					}

				} else {
					fileName = item.getName();

					if (fileName != null) {
						if (!fileName.equals("")) {
							fileName = FilenameUtils.getName(fileName);

							String path = this.getServletContext().getRealPath(
									"/")
									+ "/juegoImagen/" + fileName;

							File repositoryPath = new File(path);

							item.write(repositoryPath);

							juego.setImagen("/juegoImagen/" + fileName);
						}
					}
				}
			}

			if (juego.getId() == 0) {
				row = gestionarJuego.registrarJuego(juego);
			} else {
				row = gestionarJuego.actualizarJuego(juego);
			}

			if (row > 0) {
				mensaje = "Grabacion Exitosa";
				status = "OK";
			} else {
				mensaje = "Error en Grabacion";
				status = "NOK";
			}

			juegos = gestionarJuego.obtenerJuegos();

			request.setAttribute("juegos", juegos);
			request.setAttribute("servicios", servicios);
			request.setAttribute("mensaje", mensaje);
			request.setAttribute("status", status);

			RequestDispatcher rd = null;
			rd = request.getRequestDispatcher("listadoJuego.jsp");
			rd.forward(request, response);

		} catch (FileUploadException e) {
			juegos = gestionarJuego.obtenerJuegos();
			request.setAttribute("juegos", juegos);
			request.setAttribute("servicios", servicios);
			request.setAttribute("mensaje", "Error en Grabacion");
			request.setAttribute("status", "NOK");
			RequestDispatcher rd = null;
			rd = request.getRequestDispatcher("listadoJuego.jsp");
			rd.forward(request, response);

			throw new ServletException("Cannot parse multipart request.", e);
		} catch (Exception e) {
			juegos = gestionarJuego.obtenerJuegos();
			request.setAttribute("juegos", juegos);
			request.setAttribute("servicios", servicios);
			request.setAttribute("mensaje", "Error en Grabacion");
			request.setAttribute("status", "NOK");
			RequestDispatcher rd = null;
			rd = request.getRequestDispatcher("listadoJuego.jsp");
			rd.forward(request, response);

			e.printStackTrace();
		}
	}
}
